tailwindでCSS Module内でMulti SelectorなUtility Classを@applyすると壊れる
code:css
.hoge {
@apply group-hover:text-white;
}
とかすると
code:css
.group:hover .hoge {
color: ...
}
本当は
code:css
:global(.group:hover) .hoge { ... }
みたいになっていてほしい
しかしこれはCSS Modulesに対応している環境でないと動かないので、デフォルトをこれにするわけにはいかない 何らかのモードが必要になりそう?
@applyは任意のクラスをinjectすることができるが、グローバルに定義されている任意のMulti Selectorなクラスに対応するべきか?
結論
@applyをやめろ
回避
code:css
:global {
:local(.hoge) {
@apply group-hover:text-white;
}
}
と書く
展開されて
code:compiled.css
:global {
.group:hover :local(.hoge) {
@apply text-white;
}
}
になるため
わかるかよ
あらゆるCSSを:globalで囲み、セレクタに:localを付けるやつを作ればいいっぽいな!
↓のアプローチは全て失敗です。悲しいね
実装
最悪configを拡張することになるだろうが、可能なら知らないうちにうまくやってくれてほしいという気持ちはある
自動はとりあえず考えない
supportsCSSModules: trueとかを書かせる
CSSとしてValidでないものを吐くので、デフォルトではoff グローバルなセレクタを:global(...)で保護する
任意のシチュエーションに対応しようとする場合、@applyを展開している箇所に手を入れればいい